/**
 * 节点基类
 */
export interface Node {
  /**
   * 节点类型
   */
  readonly type: string;

  // /**
  //  * 所属行号
  //  */
  // readonly line: uint;

  // /**
  //  * 所属列索引
  //  */
  // readonly column: uint;

  /**
   * 生成代码方法
   */
  codegen(): any;
}


export interface Expression extends Node {

}


/**
 * 语法解析上下文
 */
export abstract class Context {

  /**
   * 代码行集合
   */
  readonly code: string = '';

  /**
   * 当前索引
   */
  #index: number = 0;

  /**
   * 当前符号
   */
  #currentToken: string = '';


  /**
   * 当前索引
   */
  get index() {
    return this.#index;
  }

  /**
   * 当前符号
   */
  get currentToken() {
    return this.#currentToken;
  }

  /**
   * 获取下一个符号
   */
  next(): void {

  }


  abstract parse(): Node;

}
